/*
** FileName:2982.c
** Author:Creat
** Time:下午9:39
** Date:2024/5/30
**/
#include <stdlib.h>
#include <string.h>
/*
int maximumLength(char* s) {
    int s_length = strlen(s);
    int letters_num[26];  // 存放字母数目
    int* letters_pos[26]; // 存放字母位置
    int letters_special_str_length[26]; //字母中特殊子字符串长度
    // 初始化
    memset(letters_num, 0, sizeof(int) * 26); // 初始化字母数目
    memset(letters_special_str_length, -1, sizeof(int) * 26); // 初始化字母中特殊子字符串长度
    // 初始化字母位置
    for(int i = 0;i < 26;i++){
        letters_pos[i] = (int *)malloc(sizeof(int) * s_length);
        memset(letters_pos[i], 0, sizeof(int) * s_length);
    }
    // 计数，并初始化letters_num同时记录字母位置
    for(int i = 0;i < s_length;i++){
        int index = s[i] - 'a';
        if(letters_num[index] == 0){
            letters_pos[index] = (int *)malloc(sizeof(int) * s_length);
            memset(letters_pos[index], 0, sizeof(int) * s_length);
        }else;
        letters_pos[index][letters_num[index]] = i;
        letters_num[index]++;
    }

    for(int i = 0;i < 26;i++){
        if(letters_num[i] >= 3){
            for(int width = letters_num[i] - 2;width >= 1;width--){
                int special_cnt = 0;
                for(int start = 0, end = letters_num[i] - width;start <= end && special_cnt < 3;start++){
                    if(letters_pos[i][start + width - 1] - letters_pos[i][start] + 1 == width){
                        special_cnt++;
                    }else;
                }
                if(special_cnt >= 3){
                    letters_special_str_length[i] = width;
                    break;
                }else;
            }
        }else;
    }
    int max = -1;
    for(int i = 0;i < 26;i++){
        if(max < letters_special_str_length[i]){
            max = letters_special_str_length[i];
        }else;
    }
    return max;
}*/
int maximumLength(char* s) {
    int n = strlen(s);
    int cnt[26][3] = {0};

    for (int i = 0, j = 0; i < n; i = j) {
        while (j < n && s[j] == s[i]) {
            j++;
        }
        int index = s[i] - 'a';
        int len = j - i;
        if (len > cnt[index][0]) {
            cnt[index][2] = cnt[index][1];
            cnt[index][1] = cnt[index][0];
            cnt[index][0] = len;
        } else if (len > cnt[index][1]) {
            cnt[index][2] = cnt[index][1];
            cnt[index][1] = len;
        } else if (len > cnt[index][2]) {
            cnt[index][2] = len;
        }
    }

    int res = 0;
    for (int i = 0; i < 26; i++) {
        res = fmax(res, fmax(cnt[i][0] - 2, fmin(cnt[i][0] - 1, cnt[i][1])));
        res = fmax(res, cnt[i][2]);
    }
    return res != 0 ? res : -1;
}